on keyDown global gOnSynth, gArp, gPosVolSynth, gPosPanSynth, gProg, gSynthSel, gOn, gTraccia, gPag, gOn, gRandom, gBpmSong, gPath, gWav, gSynthSel global keyNoteList, folderSynthList, scaleList, synthList, arpList, progList, stateTrackList, volValList, volPosList, virTrackList if gOn and not(the visible of sprite 76) and (folderSynthList <> []) and not(the visible of window "help") then case(the keyCode) of 18,19: -- click su 1 (non del tastierino numerico) <-> diminuisce il synth selezionato di 1 -- click su 2 (non del tastierino numerico) <-> aumenta il synth selezionato di 1 put getPos(folderSynthList,field "fieldSynth") into pos if the keyCode = 19 then if pos = count(folderSynthList) then set pos = 1 else set pos = pos + 1 end if else if pos = 1 then set pos = count(folderSynthList) else set pos = pos - 1 end if end if put getAt(folderSynthList,pos) into field "fieldSynth" set the font of member "fieldSynth" to "GMFont" set the foreColor of member "fieldSynth" to 14 if gOnSynth then IKSynthStop IKSetSynth gPath & "synth:synth" & gWav & ":" & field "fieldSynth" & ":" -- calcolo arp case(getPos(arpList,gArp)) of 1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4 otherwise set arp = 4 end case -- vol e pan IKSynthVolume integer(128*(-gPosVolSynth+54)/45) IKSynthPan integer(128*(-gPosPanSynth+54)/45) if synthList <> [] then IKSynthArp getPos(progList,gProg)-1,arp,createSeq() -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if 20,21: -- click su 3 (non del tastierino numerico) <-> diminuisce l'arp selezionato di 1 -- click su 4 (non del tastierino numerico) <-> aumenta l'arp selezionato di 1 put getPos(arpList,field "fieldArp") into pos if the keyCode = 21 then if pos = count(arpList) then set pos = 1 else set pos = pos + 1 end if else if pos = 1 then set pos = count(arpList) else set pos = pos - 1 end if end if put getAt(arpList,pos) into field "fieldArp" set the font of member "fieldArp" to "GMFont" set the foreColor of member "fieldArp" to 14 set gArp = field "fieldArp" case(getPos(arpList,gArp)) of 1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4 otherwise set arp = 4 end case -- se la sequenza sta suonando si aggiorna if gOnSynth then -- vol e pan IKSynthVolume integer(128*(-gPosVolSynth+54)/45) IKSynthPan integer(128*(-gPosPanSynth+54)/45) IKSynthArp getPos(progList,gProg)-1,arp,createSeq() end if -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if 23: -- click su 5 (non del tastierino numerico) <-> aumenta il prog selezionato di 1 put getPos(progList,field "fieldProg") into pos if pos = count(progList) then set pos = 1 else set pos = pos + 1 end if put getAt(progList,pos) into field "fieldProg" set the font of member "fieldProg" to "GMFont" set the foreColor of member "fieldProg" to 14 set gProg = field "fieldProg" -- se la sequenza sta suonando si aggiorna -- calcolo arp case(getPos(arpList,gArp)) of 1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4 otherwise set arp = 4 end case if gOnSynth then -- vol e pan IKSynthVolume integer(128*(-gPosVolSynth+54)/45) IKSynthPan integer(128*(-gPosPanSynth+54)/45) IKSynthArp getPos(progList,gProg)-1,arp,createSeq() end if -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if 22: -- click su 6 <-> diminuisce volume if gOn then if gPosVolSynth < 54 then set the locV of sprite 45 = the locV of sprite 45 + 1 set gPosVolSynth = the locV of sprite 45 IKSynthVolume integer(128*(-gPosVolSynth+54)/45) updateStage end if end if 26: -- click su 7 <-> aumenta volume if gOn then if gPosVolSynth > 9 then set the locV of sprite 45 = the locV of sprite 45 - 1 set gPosVolSynth = the locV of sprite 45 IKSynthVolume integer(128*(-gPosVolSynth+54)/45) updateStage end if end if end case end if -- controllo che il tasto premuto sia nella keyNoteList set tasto = the keyPressed if not(findPos(keyNoteList,tasto) = 0) then if gOn and (IKGetCurrentBeat() <> -1) and (folderSynthList <> []) and not(the visible of window "help") then -- ricavo quale nota è stata scelta if tasto <> "" then set nota = getProp(keyNoteList,tasto) -- ricavo l'ottava set oct = ((findPos(keyNoteList,tasto)-1)/count(scaleList))+1 set notaOct = nota & oct set Gnota = "y" & nota -- non è in play, si accende if not getPos(synthList,notaOct) then -- hilite della nota repeat with i = ((oct-1)*12 + 4) to (((oct-1)*12 + 4)+11) if the name of member the memberNum of sprite i = nota then set the memberNum of sprite i to the number of member Gnota updatestage exit repeat end if end repeat -- aggiorno la sequenza append synthList,notaOct else -- è in play, si spegne -- tolgo hilite della nota repeat with i = ((oct-1)*12 + 4) to (((oct-1)*12 + 4)+11) if the name of member the memberNum of sprite i = Gnota then set the memberNum of sprite i to the number of member nota updatestage exit repeat end if end repeat deleteAt synthList,getPos(synthList,notaOct) end if -- se ho tolto l'ultimo nota si spegne il synth if synthList = [] then set gOnSynth = 0 IKSynthStop else if not gOnSynth then set gOnSynth = 1 -- aggiorno il play -- calcolo arp case(getPos(arpList,gArp)) of 1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4 otherwise set arp = 4 end case -- vol e pan IKSynthVolume integer(128*(-gPosVolSynth+54)/45) IKSynthPan integer(128*(-gPosPanSynth+54)/45) IKSynthArp getPos(progList,gProg)-1,arp,createSeq() end if -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if end if end if else -- tasti per le schermate principali tell the stage put the frame into numFrame case(numFrame) of 2,3: -- CLICK PER IL GROOVE case(the keyPressed) of "a": -- click su mem -- se c'è un marker con hilite allora non funziona put chars(the name of member(the memberNum of sprite 12),2,length(the name of member(the memberNum of sprite 12))) into temp if not integerP(integer(temp)) then set the memberNum of sprite 13 to the number of member "Hmarker" set the loc of sprite 13 to point (51,240) updateStage --clickMarker end if end case case(the keyCode) of 25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1 -- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1 put field "fieldBpm" into bpm if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then set bpm = bpm - 1 IKmixBpm bpm end if if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then set bpm = bpm + 1 IKMixBpm bpm end if -- aggiorno il campo put bpm into field"fieldBpm" set the font of member "fieldBpm" to "GMFont" set the foreColor of member "fieldBpm" to 54 -- aggiorno il pallino del bpm set the locH of sprite 24 = 15*25*(bpm-gBpmSong)/gBpmSong+321 set the locV of sprite 24 to 449 updateStage 49: -- click su barra spazio <-> pulsante rosso puppetSprite 13,true set the memberNum of sprite 13 to the number of member "Hred" set the loc of sprite 13 to point (320,240) updateStage clickRed -- + e - *********************** 67: -- click su * <-> aumenta volume if gTraccia <> 0 then if getAt(stateTrackList,gTraccia) <> "off" then if getAt(volPosList,gTraccia)>168 then setAt volPosList,gTraccia,(getAt(volPosList,gTraccia)-1) set vol = (128/power(1.022,142))*power(1.022,((-142*the locV of sprite 3)+142+(310*141))/142)+4 if integer(vol) = 124 then set vol = 128 IKVolume gTraccia,integer(vol) setAt volValList,gTraccia,integer(vol) -- posiziona il controllo volume set the locV of sprite 3 to getAt(volPosList,gTraccia) updateStage end if end if end if 78: -- click su - <-> diminuisce volume if gTraccia <> 0 then if getAt(stateTrackList,gTraccia) <> "off" then if getAt(volPosList,gTraccia)<310 then setAt volPosList,gTraccia,(getAt(volPosList,gTraccia)+1) set vol = (128/power(1.022,142))*power(1.022,((-142*the locV of sprite 3)+142+(310*141))/142)-1 if integer(vol) = 5 then set vol = 0 IKVolume gTraccia,integer(vol) setAt volValList,gTraccia,integer(vol) -- posiziona il controllo volume set the locV of sprite 3 to getAt(volPosList,gTraccia) updateStage end if end if end if -- ***************************** -- FRECCE ********************** 125: -- click sulla freccia down <-> click su un fileAudio if gTraccia <> 0 then -- controllo se questa traccia è già impegnata case(getAt(virTrackList,gTraccia)) of -1: -- la traccia è libera set numLine = random(the lineCount of member "fieldAudio") otherwise -- la traccia è già impegnata -- se l'ho trovato nell'ultima linea del field vado alla linea 1 if getAt(virTrackList,gTraccia) = the lineCount of member "fieldAudio" then set numLine = 1 else set numLine = getAt(virTrackList,gTraccia) end if end case -- se la linea scelta è già impegnata passo alla linea successiva repeat while getOne(virTrackList,numLine) set numLine = numLine + 1 if numLine = (the lineCount of member "fieldAudio" + 1) then set numLine = 1 end repeat clickNameAudio numLine -- aggiorno la visualizzazione del field "fieldAudio" put the lineCount of member "fieldAudio" /20 into q put the lineCount of member "fieldAudio" mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set numPag = q+1 else set numPag = q end if if numLine mod 20 = 1 then -- ho cambiato pagina if gPag = numPag then -- sono già nell'ultima pagina scrollByLine member "fieldAudio",-20*(numPag-1) set gPag = 1 else scrollByLine member "fieldAudio",20 set gPag = gPag + 1 end if -- se la traccia è già impegnata sono nella pagina giusta altrimenti sono a pagina 1 else -- calcolo in quale pagina è la numLine put numLine /20 into q put numLine mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set numPag = q+1 else set numPag = q end if if gPag <> numPag then scrollByLine member "fieldAudio",20*(numPag-1) set gPag = numPag end if end if end if 126: -- click sulla freccia up <-> click su un fileAudio if gTraccia <> 0 then -- controllo se questa traccia è già impegnata case(getAt(virTrackList,gTraccia)) of -1: -- la traccia è libera set numLine = random(the lineCount of member "fieldAudio") otherwise -- la traccia è già impegnata -- se l'ho trovato nella prima linea del field vado all'ultima if getAt(virTrackList,gTraccia) = 1 then set numLine = the lineCount of member "fieldAudio" else set numLine = getAt(virTrackList,gTraccia) end if end case -- se la linea scelta è già impegnata passo alla linea successiva repeat while getOne(virTrackList,numLine) set numLine = numLine - 1 if numLine = 0 then set numLine = the lineCount of member "fieldAudio" end repeat clickNameAudio numLine -- aggiorno la visualizzazione del field "fieldAudio" put the lineCount of member "fieldAudio" /20 into q put the lineCount of member "fieldAudio" mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set numPag = q+1 else set numPag = q end if -- calcolo in quale pagina è la numLine put numLine /20 into q put numLine mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set pag = q+1 else set pag = q end if if gPag > pag then scrollByLine member "fieldAudio",-20*(gPag-pag) set gPag = pag else if gPag < pag then scrollByLine member "fieldAudio",20*(pag-gPag) set gPag = pag end if end if end if 124: -- click sulla freccia right <-> click su nextLoop -- funziona solo se non siamo sull'ultima pagina del field "fieldAudio" put the lineCount of member "fieldAudio" /20 into q put the lineCount of member "fieldAudio" mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set numPag = q+1 else set numPag = q end if if gPag <> numPag then scrollByLine member "fieldAudio",20 set gPag = gPag + 1 else scrollByLine member "fieldAudio",-20*(numPag-1) set gPag = 1 end if 123: -- click sulla freccia left <-> click su prevLoop -- funziona solo se non siamo sulla prima pagina del field "fieldAudio" if gPag <> 1 then scrollByLine member "fieldAudio",-20 set gPag = gPag - 1 else -- conto quante pagine abbiamo put the lineCount of member "fieldAudio" /20 into q put the lineCount of member "fieldAudio" mod 20 into r -- abbiamo q+1 pagine se r>0, q se r=0 if r then set numPag = q+1 else set numPag = q end if scrollByLine member "fieldAudio",20*(numPag-1) set gPag = numPag end if -- ***************************** -- RANDOM ********************** 115,116,119,121: -- click su beginLine (115) <-> perc -- click su endLine (119) <-> mild -- click su pageUp (116) <-> inst -- click su pageDown (121) <-> random set gTraccia = 0 puppetSprite 12,true -- posiziona il pulsante del volume e del pan set the loc of sprite 3 = point(529,239) set the loc of sprite 4 = point(543,239) -- si vuota il field "fieldAudio" repeat with i = 1 to 8 if getAt(virTrackList,i) <> -1 then put "àà" into word 1 of line getAt(virTrackList,i) of field "fieldAudio" end repeat scrollByLine member "fieldAudio",-20*(the lineCount of member "fieldAudio"/20) set gPag = 1 -- aggiorno la tempList if virTrackList <> [-1,-1,-1,-1,-1,-1,-1,-1] then repeat with i = 1 to 8 setAt tempList,i,getAt(virTrackList,i) end repeat end if set virTrackList = [-1,-1,-1,-1,-1,-1,-1,-1] case(the keyCode) of 115: set gRandom = "perc" set the memberNum of sprite 12 to the number of member "Hperc" set the ink of sprite 12 to 36 set the loc of sprite 12 = point(218,17) 116: set gRandom = "inst" set the memberNum of sprite 12 to the number of member "Hinst" set the ink of sprite 12 to 36 set the loc of sprite 12 = point(184,34) 119: set gRandom = "mild" set the memberNum of sprite 12 to the number of member "Hmild" set the ink of sprite 12 to 36 set the loc of sprite 12 = point(128,79) 121: set gRandom = "rand" set the memberNum of sprite 12 to the number of member "Hrand" set the ink of sprite 12 to 36 set the loc of sprite 12 = point(156,55) end case updateStage playRandom -- ***************************** end case 6,7: -- CLICK PER IL SEQ case(the keyCode) of 25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1 -- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1 put field "fieldBpm" into bpm if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then set bpm = bpm - 1 IKmixBpm bpm end if if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then set bpm = bpm + 1 IKMixBpm bpm end if -- aggiorno il campo put bpm into field"fieldBpm" set the font of member "fieldBpm" to "GMFont" set the foreColor of member "fieldBpm" to 54 -- aggiorno il pallino del bpm set the locH of sprite 24 = 15*(100*(bpm-gBpmSong)/gBpmSong+52)/4 + 5 set the locV of sprite 24 to 362 updateStage 49: -- click su barra spazio <-> start/stop set the memberNum of sprite 36 to the number of member "HredSeq" set the ink of sprite 36 to 36 updateStage end case 10,11: -- CLICK PER IL VMIX case(the keyCode) of 25,29: -- click su 9 (non del tastierino numerico) <-> diminuisce il bpm di 1 -- click su 0 (non del tastierino numerico) <-> aumenta il bpm di 1 put field "fieldBpm" into bpm if (the keyCode = 25) and (bpm > (4*gBpmSong/5+1)) then set bpm = bpm - 1 IKmixBpm bpm end if if (the keyCode = 29) and (bpm < (6*gBpmSong/5-1)) then set bpm = bpm + 1 IKMixBpm bpm end if -- aggiorno il campo put bpm into field"fieldBpm" set the font of member "fieldBpm" to "GMFont" set the foreColor of member "fieldBpm" to 54 -- aggiorno il pallino del bpm set the locH of sprite 24 = 15*25*(bpm-gBpmSong)/gBpmSong+321 set the locV of sprite 24 to 341 updateStage 49: -- click su barra spazio <-> start/stop if IKGetCurrentBeat() <> -1 then -- si accende l'hilite intorno al pulsante set the memberNum of sprite 36 to the number of member "HredMix" end if end case end case end tell end if end ----------------------------------------------------------------------- on keyUp global gOn,gTraccia,gSolo global folderSynthList,synthList if the keyCode = 24 then markSynth -- marca il synth case(the keyPressed) of ";": -- vuota la tastiera if gOn and (folderSynthList <> []) and not(the visible of window "help") then -- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click if the visible of sprite 76 then pass else if synthList <> [] then emptySynth end if end if end if ":": clickLed otherwise -- tasti per le schermate principali tell the stage put the frame into numFrame case(numFrame) of 2,3: -- CLICK PER IL GROOVE -- the keyPressed : This system property gives the character assigned to the key that was last pressed case(the keyPressed) of "a": -- click su m <-> pulsante marker -- se c'è un marker con hilite allora non funziona put chars(the name of member(the memberNum of sprite 12),2,length(the name of member(the memberNum of sprite 12))) into temp if not integerP(integer(temp)) then clickMarker "q": -- click su q <-> solo set gSolo = not gSolo puppetSprite 11,true clickSolo "w": -- click su w <-> mute,play if gTraccia <> 0 and gOn then -- memorizzo il numero del controlTrack cliccato set spriteNum = 40 + gTraccia set traccia = spriteNum - 40 clickControlTrack traccia, spriteNum end if end case -- the keyCode : This keyboard code is the key's numerical value, not the ANSI value case(the keyCode) of -- TRACCE ********************** 83,84,85,86,87,88,89: -- click su 1..7 <-> traccia 1..traccia 7 set gTraccia = the keyCode - 82 puppetSprite 12,true if gSolo and getAt(stateTrackList,gTraccia) <> "off" then clickControlTrack gTraccia, 40 + gTraccia clickTrack 91: -- click su 8 <-> traccia 8 set gTraccia = 8 puppetSprite 12,true if gSolo and getAt(stateTrackList,8) <> "off" then clickControlTrack 8, 48 clickTrack -- ***************************** end case 6,7: -- CLICK PER IL SEQ case(the keyCode) of 49: -- click su barra spazio <-> start/stop -- if IKGetCurrentBeat() <> -1 then -- si spegne l'hilite intorno al pulsante set the memberNum of sprite 36 to the number of member "redButton" set the ink of sprite 36 to 8 updateStage -- aggiorno il fieldState put "" into field "fieldState" clickRedSeq -- end if end case 10,11: -- CLICK PER IL VMIX case(the keyCode) of 49: -- click su barra spazio <-> start/stop if IKGetCurrentBeat() <> -1 then -- si spegne l'hilite intorno al pulsante set the memberNum of sprite 36 to the number of member "redMix" updateStage clickRedMix end if end case end case end tell end case end **************************************************************** -- funzione che vuota la synthList on emptySynth global gSynthSel,gOnSynth global synthList set the memberNum of sprite 64 to the number of member "empty" updateStage -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if -- se la nota compare nella synthList si spegne l'hilite del tasto repeat with i = 1 to 3 set start = 12*(i-1) + 3 -- frame prima dell'inizio di ogni ottava repeat with j = 1 to 12 if char 1 of the name of member the memberNum of sprite (start+j) = "y" then set nota = chars(the name of member the memberNum of sprite (start+j),2,length(the name of member the memberNum of sprite (start+j))) & i if getPos(synthList,nota) then set nota = chars(nota,1,length(nota)-1) set the memberNum of sprite (start+j) to the number of member nota updateStage end if end if end repeat end repeat set synthList = [] IKSynthStop set gOnSynth = 0 end **************************************************************** -- clikc sul led rosso on clickLed global gOn,gArp,gProg,gOnSynth,gPosVolSynth,gPosPanSynth,gSynthSel,gPath,gWav global synthList,arpList,progList,folderSynthList if gOn and (IKGetCurrentBeat() <> -1) and (folderSynthList <> []) and not(the visible of window "help") then -- se c'è il fieldElencoSynthSalvati aperto si chiude e non prende il click if the visible of sprite 76 then pass else if gOnSynth then set gOnSynth = 0 IKSynthStop else -- è acceso il led rosso, diventa azzurro solo se ci sono delle note selezionate IKSetSynth gPath & "synth:synth" & gWav & ":" & field "fieldSynth" & ":" if synthList <> [] then set the visible of sprite 3 to false -- aggiorno il play -- calcolo arp case(getPos(arpList,gArp)) of 1,2,3,4:set arp = integer(chars(gArp,3,length(gArp)))/4 otherwise set arp = 4 end case -- vol e pan IKSynthVolume integer(128*(-gPosVolSynth+54)/45) IKSynthPan integer(128*(-gPosPanSynth+54)/45) IKSynthArp getPos(progList,gProg)-1,arp,createSeq() set gOnSynth = 1 -- se c'è l'hilite intorno ai marker sparisce if gSynthSel then set the locH of sprite 74 to -20 set gSynthSel = 0 end if end if end if end if end if end